﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Cotizav.PRESENTACION.DialogBox;
using Cotizav.CONEXION;

namespace Cotizav.PRESENTACION.Visita
{
    public partial class PanelVisita : Form
    {
        CtrlVendedor ctVendedor;
        CtrlVisita ctVisita;
        CtrlCotizacion ctCotizacion;
        CtrlClientes ctCliente;

        CLIENTE selectedCliente;
                
        public PanelVisita()
        {
            InitializeComponent();

            ctVendedor = new CtrlVendedor();
            ctCotizacion = new CtrlCotizacion();
            ctCliente = new CtrlClientes();
            ctVisita = new CtrlVisita();

            selectedCliente = new CLIENTE();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if (txtCliente.Tag != null)
            {
                if (!string.IsNullOrWhiteSpace(txtCliente.Tag.ToString()))
                {
                    //limpiamos el panel
                    panelOperaciones.Controls.Clear();

                    //obtencion de parametros
                    string idCliente = txtCliente.Tag != null ? txtCliente.Tag.ToString() : null;
                    DateTime? fechaDesde;
                    DateTime? fechaHasta;

                    if (chkfechaDesde.Checked)
                    {
                        fechaDesde = dateDesde.Value.Date;
                    }
                    else
                    {
                        fechaDesde = null;
                    }

                    if (chkfechaHasta.Checked)
                    {
                        fechaHasta = dateHasta.Value.Date;
                    }
                    else
                    {
                        fechaHasta = null;
                    }

                    DataTable result = ctVisita.getListaVisita(idCliente, fechaDesde, fechaHasta);

                    this.cargarTreeView(result);
                    treeBusqueda.ExpandAll();
                }
            }
            else
            {
                MessageBox.Show("Ingrese el cliente", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void cargarTreeView(DataTable tableResult)
        {
            //logica de prueba
            TreeNode parent = new TreeNode(selectedCliente.razonSocial);
            parent.ImageIndex = 0;
            parent.SelectedImageIndex = 0;
            parent.Tag = selectedCliente.idCliente;

            TreeNode nodeChildren;

            foreach (DataRow dr in tableResult.Rows)
            {
                nodeChildren = new TreeNode();
                nodeChildren.Text = dr["fechaVisita"].ToString();
                nodeChildren.Tag = dr["idVisita"].ToString();

                DateTime fechavisita = Convert.ToDateTime(dr["fechaVisita"].ToString()).Date;
                string estado = dr["estado"].ToString();

                switch (estado)
                {
                    case "Pendiente":
                        DateTime fechaActual = DateTime.Now.Date;
                        nodeChildren.ContextMenuStrip = finalizarVisitaMenuStrip;

                        if (fechaActual.CompareTo(fechavisita) <= 0) //esta pendiente
                        {
                            nodeChildren.ImageIndex = 3;
                            nodeChildren.SelectedImageIndex = 3;
                        }
                        else
                        {
                            nodeChildren.ImageIndex = 2;
                            nodeChildren.SelectedImageIndex = 2;
                        }

                        break;
                    case "Realizado":
                        nodeChildren.ImageIndex = 1;
                        nodeChildren.SelectedImageIndex = 1;
                        break;
                }

                parent.Nodes.Add(nodeChildren);
            }

            treeBusqueda.Nodes.Clear();
            treeBusqueda.Nodes.Add(parent);
        }

        //private void cargarTreeViewBusqueda(DataTable result)
        //{
        //    //logica de prueba
        //    TreeNode parent = new TreeNode("Cotizav");
        //    parent.ImageIndex = 0;
        //    string lastIdCotizacion = string.Empty;
        //    TreeNode lastNodeCotizacion = new TreeNode();

        //    foreach (DataRow dr in result.Rows)
        //    {
        //        if (!dr["idCotizacion"].ToString().Equals(lastIdCotizacion))
        //        {
        //            TreeNode cotizacion = new TreeNode(dr["codigocotizacion"].ToString());
        //            cotizacion.ImageIndex = 4;
        //            cotizacion.Tag = dr["idCotizacion"].ToString();
        //            parent.Nodes.Add(cotizacion);

        //            lastIdCotizacion = dr["idCotizacion"].ToString();
        //            lastNodeCotizacion = cotizacion;

        //            if (!string.IsNullOrEmpty(dr["idvisita"].ToString()))
        //            {
        //                TreeNode coti_visita = new TreeNode(dr["fechaVisita"].ToString());                        
        //                coti_visita.Tag = dr["idvisita"].ToString();

        //                DateTime fechavisita = Convert.ToDateTime(dr["fechaVisita"].ToString()).Date;
        //                string estado = dr["estado"].ToString();

        //                switch (estado)
        //                {
        //                    case "Pendiente":
        //                        DateTime fechaActual = DateTime.Now.Date;
        //                        coti_visita.ContextMenuStrip = finalizarVisitaMenuStrip;

        //                        if (fechaActual.CompareTo(fechavisita) <= 0) //esta pendiente
        //                        {
        //                            coti_visita.ImageIndex = 3;
        //                        }
        //                        else
        //                        {
        //                            coti_visita.ImageIndex = 2;
        //                        }

        //                        break;
        //                    case "Realizado":
        //                        coti_visita.ImageIndex = 1;
        //                        break;
        //                }

        //                lastNodeCotizacion.Nodes.Add(coti_visita);
        //            }
        //        }
        //        else
        //        {
        //            TreeNode visita = new TreeNode(dr["fechavisita"].ToString());                    
        //            visita.Tag = dr["idvisita"].ToString();

        //            DateTime fechavisita = Convert.ToDateTime(dr["fechaVisita"].ToString()).Date;
        //            string estado = dr["estado"].ToString();

        //            switch (estado)
        //            {
        //                case "Pendiente":
        //                    DateTime fechaActual = DateTime.Now.Date;
        //                    visita.ContextMenuStrip = finalizarVisitaMenuStrip;

        //                    if (fechaActual.CompareTo(fechavisita) <= 0) //esta pendiente
        //                    {
        //                        visita.ImageIndex = 3;
        //                    }
        //                    else
        //                    {
        //                        visita.ImageIndex = 2;
        //                    }

        //                    break;
        //                case "Realizado":
        //                    visita.ImageIndex = 1;
        //                    break;
        //            }

        //            lastNodeCotizacion.Nodes.Add(visita);
        //        }
        //    }

        //    treeBusqueda.Nodes.Clear();
        //    treeBusqueda.Nodes.Add(parent);
        //}

        private void treeBusqueda_AfterSelect(object sender, TreeViewEventArgs e)
        {
            TreeNode selectedNode = treeBusqueda.SelectedNode;

            if (selectedNode.Tag != null)
            {
                AgregarVisita iuAddVisita;

                if (selectedNode.Tag.ToString().StartsWith("CLI"))
                {
                    btnAddVisita.Enabled = true;
                    btnModificarVisita.Enabled = false;
                    btnEliminarVisita.Enabled = false;

                    panelOperaciones.Controls.Clear();
                    //iuAddVisita = new AgregarVisita(selectedNode.Tag.ToString(), string.Empty);
                    //panelOperaciones.Controls.Clear();
                    //iuAddVisita.setFormReadOnly();
                    //panelOperaciones.Controls.Add(iuAddVisita);
                }
                else if (selectedNode.Tag.ToString().StartsWith("VIS"))
                {
                    
                    btnAddVisita.Enabled = false;
                    string idVisita = selectedNode.Tag.ToString();
                    VISITA tempVisita = ctVisita.getVisita(idVisita);
                    btnModificarVisita.Enabled = tempVisita.estado == "Pendiente" ? true : tempVisita.estado == "Realizado" ? false : false ;
                    btnEliminarVisita.Enabled = true;
                    
                    //muestra panel de visita solo lectura                    
                    string idCotizacion = selectedNode.Parent.Tag != null ? selectedNode.Parent.Tag.ToString() : string.Empty;

                    iuAddVisita = new AgregarVisita(idCotizacion, idVisita);
                    panelOperaciones.Controls.Clear();
                    iuAddVisita.setFormReadOnly();
                    panelOperaciones.Controls.Add(iuAddVisita);
                }
            }
            else
            {
                panelOperaciones.Controls.Clear();
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            //habilitamos los controles necesarios
            gbBusqueda.Enabled = true;
            treeBusqueda.Enabled = true;

            btnAddVisita.Enabled = true;
            btnModificarVisita.Enabled = false;
            btnEliminarVisita.Enabled = false;

            panelOperaciones.Controls.Clear();
            //AgregarVisita formAdded = panelOperaciones.Controls["AgregarVisita"] as AgregarVisita;
            //formAdded.clearPanel();

            btnAceptar.Visible = false;
            btnCancelar.Visible = false;
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            //realizamos el registro de la visita
            AgregarVisita form = panelOperaciones.Controls["AgregarVisita"] as AgregarVisita;

            if (btnAceptar.Tag != null)
            {
                string selectedOption = btnAceptar.Tag.ToString();

                switch (selectedOption)
                {
                    case "Agregar":
                        DialogResult dr1 = MessageBox.Show(this, "¿Confirmar registro de visita?", "Cotizav", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

                        if (dr1 == DialogResult.Yes)
                        {
                            form.registrarVisita();
                        }
                        else if (dr1 == DialogResult.No)
                        {
                            this.btnCancelar_Click(sender, e);
                        }
                        break;

                    case "Modificar":
                        DialogResult dr2 = MessageBox.Show(this, "¿Confirmar modificación de visita?", "Cotizav", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

                        if (dr2 == DialogResult.Yes)
                        {
                            form.modificarVisita();
                        }
                        else if (dr2 == DialogResult.No)
                        {
                            this.btnCancelar_Click(sender, e);
                        }
                        break;
                }                
            }

            this.btnBuscar_Click(sender, e);
            
            btnAceptar.Tag = string.Empty;
            btnAceptar.Visible = false;
            btnCancelar.Visible = false;

            gbBusqueda.Enabled = true;
            treeBusqueda.Enabled = true;

            btnAddVisita.Enabled = false;
            btnModificarVisita.Enabled = false;
            btnEliminarVisita.Enabled = false;
        }

        private void btnAddVisita_Click(object sender, EventArgs e)
        {
            TreeNode selectedNode = treeBusqueda.SelectedNode;

            if (selectedNode != null)
            {
                if (selectedNode.Tag != null)
                {
                    AgregarVisita iuAddVisita;

                    if (selectedNode.Tag.ToString().StartsWith("CLI"))
                    {
                        btnAceptar.Tag = "Agregar";

                        treeBusqueda.Enabled = false;
                        btnAceptar.Visible = true;
                        btnCancelar.Visible = true;
                        gbBusqueda.Enabled = false;

                        btnAddVisita.Enabled = false;
                        btnModificarVisita.Enabled = false;
                        btnEliminarVisita.Enabled = false;

                        iuAddVisita = new AgregarVisita(selectedNode.Tag.ToString(), string.Empty);
                        panelOperaciones.Controls.Clear();
                        panelOperaciones.Controls.Add(iuAddVisita);
                    }
                } 
            }
        }

        private void btnModificarVisita_Click(object sender, EventArgs e)
        {
            TreeNode selectedNode = treeBusqueda.SelectedNode;

            if (selectedNode != null)
            {
                btnAceptar.Tag = "Modificar";

                treeBusqueda.Enabled = false;
                btnAceptar.Visible = true;
                btnCancelar.Visible = true;
                gbBusqueda.Enabled = false;

                btnAddVisita.Enabled = false;
                btnModificarVisita.Enabled = false;
                btnEliminarVisita.Enabled = false;

                AgregarVisita actualizarForm = panelOperaciones.Controls["AgregarVisita"] as AgregarVisita;

                if (actualizarForm != null)
                {
                    actualizarForm.setFormEditable();
                }
                else
                {
                    btnCancelar_Click(sender,e);
                }
            }
        }

        private void btnEliminarVisita_Click(object sender, EventArgs e)
        {

        }

        private void btnBuscarCliente_Click(object sender, EventArgs e)
        {
            DialogSearchObject buscarCliente = new DialogSearchObject("Cliente");
            if (buscarCliente.ShowDialog(this) == DialogResult.OK)
            {
                string idCliente = buscarCliente.ResultadoBusqueda;

                if (!string.IsNullOrWhiteSpace(idCliente))
                {
                    selectedCliente = ctCliente.getCliente(idCliente);

                    txtCliente.Text = selectedCliente.razonSocial;
                    txtCliente.Tag = selectedCliente.idCliente;
                }
            }
        }

        private void txtLimpiar_Click(object sender, EventArgs e)
        {
            txtCliente.ResetText();
            txtCliente.Tag = null;
            selectedCliente = new CLIENTE();
        }

        private void finalizarVisitaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //obtenemos el objeto que llamo 
            if (finalizarVisitaToolStripMenuItem.Tag != null)
            {
                string idVisita = finalizarVisitaToolStripMenuItem.Tag.ToString();

                if (!string.IsNullOrWhiteSpace(idVisita))
                {
                    //procede con registrar la visita
                    RegistrarVisita iuRegVisita = new RegistrarVisita(idVisita);
                    iuRegVisita.ShowDialog(this);
                    this.btnBuscar_Click(sender, e);
                }
            }            
        }

        private void treeBusqueda_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                TreeNode selectedNode = e.Node;

                if (selectedNode != null)
                {
                    if (selectedNode.ContextMenuStrip != null)
                    {
                        ContextMenuStrip menuStrip = selectedNode.ContextMenuStrip;
                        ToolStripItem stripItem = menuStrip.Items["finalizarVisitaToolStripMenuItem"];

                        if (stripItem != null)
                        {
                            stripItem.Tag = selectedNode.Tag;
                        }
                    }
                }
            }
        }

        private void fechaDesde_CheckedChanged(object sender, EventArgs e)
        {
            if (chkfechaDesde.Checked)
            {
                dateDesde.Enabled = true;
            }
            else
            {
                dateDesde.Enabled = false;
            }
        }

        private void fechaHasta_CheckedChanged(object sender, EventArgs e)
        {
            if (chkfechaHasta.Checked)
            {
                dateHasta.Enabled = true;
            }
            else
            {
                dateHasta.Enabled = false;
            }
        }
    }
}
